void funcionPrincipal(){
  int n;
  cin >> n;
  Maso maso = Maso(n);

  vector<vector<int> > matrizDiferencia ( n, vector<int> ( n, -10000 ));

  vector<vector<int> > matrizJugadas;
  matrizJugadas.resize(n);
  for (int i = 0; i < matrizJugadas.size(); i++)
  {
    matrizJugadas[i].resize(n);
  }
  
  robanumeros(maso, 0, maso.cant_cartas-1, matrizDiferencia, matrizJugadas);
  
  bool turno_jug1 = true;
  int cant_jugadas  = 0;
  int jugador1 = 0;
  int jugador2 = 0;  
  
  int i = 0;
  int j = maso.cant_cartas-1;


/*Imprimir solución*/

  for (int k = 0; k <= maso.cant_cartas-1;)
  {
    if(k == maso.cant_cartas-1)
    {
      if (turno_jug1){jugador1 += maso.cartas[i].valor;}  
      else{jugador2 += maso.cartas[i].valor;}
      turno_jug1 = !turno_jug1;
      cant_jugadas += 1;
      k++;
    }
    
    else if (matrizJugadas[i][j] > 0)
    {
      k += matrizJugadas[i][j];    
      for (int l = i; l < i+matrizJugadas[i][j]; l++)
      {
        if (turno_jug1){jugador1 += maso.cartas[l].valor;}  
        else{jugador2 += maso.cartas[l].valor;}
      }
      turno_jug1 = !turno_jug1;
      cant_jugadas += 1; 
      i += matrizJugadas[i][j];   
       
    }
    else
    {
      k -= matrizJugadas[i][j];        
      for (int l = j; l > j+matrizJugadas[i][j]; l--)
      {
        if (turno_jug1){jugador1 += maso.cartas[l].valor;}  
        else{jugador2 += maso.cartas[l].valor;}
      }
      cant_jugadas += 1;
      turno_jug1 = !turno_jug1;
      j += matrizJugadas[i][j];    
    }  
  } 

  cout << cant_jugadas << " " << jugador1 << " " << jugador2 << endl;

  i = 0;
  j = maso.cant_cartas-1;

 
  for (int k = 0; k <= maso.cant_cartas-1;)
  {
    if(k == maso.cant_cartas-1)
    {
      cout << "Izq 1" << endl;
      k++;
    }
    
    else if (matrizJugadas[i][j] > 0)
    {
      cout << "Izq " << matrizJugadas[i][j] << endl;
      k += matrizJugadas[i][j];    
      i += matrizJugadas[i][j];   
       
    }
    else
    {
      cout << "Der " << -matrizJugadas[i][j] << endl;
      k -= matrizJugadas[i][j];        
      j += matrizJugadas[i][j];    
    }
  } 
/*Imprimir solución*/

  return;

}

int robanumeros(Maso &maso, int i, int j, vector<vector<int> > &matrizDiferencia, vector<vector<int> > &matrizJugadas)
{
  if (i > j){return 0;} 
  
  else if (i == j) 
  {
    return maso.cartas[i].valor;
  }
        
  else
  {
  if (matrizDiferencia[i][j]==-10000)
  {
      int pass = 0;
      int maximo = -9999;
      for (int k = 0; k <= j-i; k++)
      {   
        int suma_izq = 0;
        int suma_der = 0;
        
        for (int l = i; l <= i+k; l++)
        {  
          suma_izq += maso.cartas[l].valor;
        }
        
        for (int l = j; l >= j-k; l--)
        {  
          suma_der += maso.cartas[l].valor;
        }  
        int robaDerecha = suma_der - robanumeros(maso, i, j-k-1, matrizDiferencia, matrizJugadas);
        int robaIzquierda = suma_izq - robanumeros(maso, i+k+1, j, matrizDiferencia, matrizJugadas);
        if (robaIzquierda > robaDerecha)
        {
          if (robaIzquierda > maximo){pass = k+1; maximo = robaIzquierda;}
        }
        else
        {
          if (robaDerecha > maximo){pass = -(k+1); maximo = robaDerecha;}
        }
      }
      matrizJugadas[i][j] = pass;
      matrizDiferencia[i][j] = maximo;
    }
  }
  return matrizDiferencia[i][j];    
}

